package com.gxa.shop.commons.r;

import lombok.Data;

import java.util.HashMap;

/**
 * commons.r
 * User: zjy
 * Date: 2024/12/09 14:38
 * motto:   逆水行舟不进则退
 * Description:
 * Version: V1.0
 */
@Data
public class R<T> {
    private Integer code;
    private String msg;
    private T data;

//    code是1是正常的
//    msg是操作成功
//    data 没有响应的数据

    public static  R ok(){
        R r=new R();
        r.code=1;
        r.msg="操作成功";
        return r;
    }
//    code是1是正常
//    msg是操作成功
//    data 有响应的数据
    public static R ok(Object data){
        R r=new R();
        r.code=1;
        r.msg="操作成功";
        r.data=data;
        return r;
    }

    public static R ok(String msg){
        R r=new R();
        r.code=1;
        r.msg=msg;
        return r;
    }

    public static R ok(String msg,Object data){
        R r=new R();
        r.code=1;
        r.msg=msg;
        r.data=data;
        return r;
    }

    public static R error(){
        R r=new R();
        r.code=-1;
        r.msg="失败";
        return r;
    }

    public static R error(String msg){
        R r=new R();
        r.code=-1;
        r.msg=msg;
        return r;
    }

    /**
     * 向R对象的data成员变量中添加键值对。
     *
     * @param key   要添加到data中的键。
     * @param value 与键关联的值。
     * @return 当前的R实例，以便可以链式调用其他方法。
     * @throws RuntimeException 如果data不是HashMap类型的实例，则抛出异常。
     */
    public R addData(String key, Object value) {
        // 检查this.data是否为null，如果是，则创建一个新的HashMap实例并赋值给this.data。
        if (this.data == null) {
            // 将this.data初始化为HashMap<String, Object>类型。
            this.data = (T) new HashMap<>();
            // 向this.data中添加键值对。
            ((HashMap<String, Object>) this.data).put(key, value);
        }
        // 如果this.data已经不是null，并且是一个HashMap实例，则直接向其中添加键值对。
        else if (this.data instanceof HashMap) {
            // 向已存在的HashMap中添加新的键值对。
            ((HashMap<String, Object>) this.data).put(key, value);
        } else {
            // 如果this.data既不是null也不是HashMap类型的实例，则抛出运行时异常。
            throw new RuntimeException("R结果集设置错误：data不是HashMap类型");
        }
        // 返回当前的R实例，允许进行方法链调用。
        return this;
    }


}